#pragma once

#include <vector>
class Buff;
class Player
{
public:
	Player() : m_life(200) {}
	virtual ~Player(){}
	virtual void SelectHeroPack() = 0;
	virtual void SelectItem() = 0;
	virtual void SelectMainHero() = 0;
	
	void PushBuff(Buff*);
	void Heal(int v);
	void Damage(int v);
	void UpdateBuffs();
	inline int	IncAttack(int a){return a;}
	inline int	DecAttack(int a){return a;}
	inline int  GetLife(){return m_life;}

private:
	int m_life;
	enum {BUFF_TYPE_CNT = 1};
	typedef std::vector<Buff*>::iterator BVIter;
	std::vector<Buff*> m_buffs[BUFF_TYPE_CNT];
};

class HumanPlayer : public Player
{
	virtual void SelectHeroPack();
	virtual void SelectItem();
	virtual void SelectMainHero();
};

class ComputerPlayer : public Player
{
	virtual void SelectHeroPack();
	virtual void SelectItem();
	virtual void SelectMainHero();
};